#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/stat.h>
#define   MSG_FILE "." 
#define   BUFFER 255 

struct msgtype { 
    long mtype; 
    char buffer[BUFFER+1]; 
};
int main(int argc,char **argv)
{
	struct msgtype msg; 
	key_t key; 
	int msgid; 
    
	if(argc != 2) 
	{ 
		fprintf(stderr,"Usage:%s string/n", argv[0]); 
		exit(1); 
	}
	if((key=ftok(MSG_FILE,'a'))==-1)
	{
		fprintf(stderr,"creat key error:%s\n",strerror(errno));
		printf("create key error :%s \n",strerror(errno));
		exit(1);
	}
	if((msgid=msgget(key,IPC_CREAT|0666))==-1)
	{			
		fprintf(stderr,"creat Message error:%s\n",strerror(errno));
		printf("create Message error :%s \n",strerror(errno));
		exit(1);
	}
	printf("msqid = %d \n",msgid);
	while(1)
	{
	msg.mtype = 1 ;
	fgets(msg.buffer,100,stdin);
	printf("h\n");
	if(msgsnd(msgid,&msg,sizeof(struct msgtype),0)<0)
	{
		fprintf(stderr, "Client send error :%s/n", strerror(errno));
	};
	sleep(2);
	if (strcmp(msg.buffer,"q\n")==0)
			break;
	memset(&msg,'\0',sizeof(struct msgtype));
	if(msgrcv(msgid,&msg,sizeof(struct msgtype),2,0)<0)			       			{	               //接收消息   
  	printf("could not make sure server to recv \n");      
    }  
	fprintf(stderr, "Client receive:%s/n", msg.buffer); 
	printf("%s \n",msg.buffer);
	}
	return 0;
}
